우리의 일상 경험은 연속적인 정보의 흐름으로 구성되어 있다. 이러한 정보의 흐름은 경험 당시의 시공간, 인지 및 정서적 맥락과 연합되어 개별적인 단위로 나누어지고 각각의 고유한 일화 기억으로 자리 잡는다. 최근의 일화 기억 연구들은 기억 체계가 정보의 흐름을 어떻게 단위화하여 일화 기억을 형성하는지에 초점을 맞추어 왔다. 우리는 어떻게 연속적인 정보를 개별적인 사건으로 지각하는가? 사건 지각에 대한 이론들은 우리가 사건의 경계(event boundary)를 접하게 될 때, 이 경계를 기준으로 경험을 분할하여 지각한다고 제안한다 (Radvansky, 2012; Zacks, Speer, Swallow, Braver, & Reynolds, 2007). 여기서 사건 경계는 경험 상에 발생하는 공간적 변화, 지각적 변화, 인지적 변화(정서, 목표 상태 등)를 포함한다. 이러한 경계를 접한 기억 체계는 이 경험을 고유한 사건들로 분할하고, 사건들 안의 정보를 통합하여 사건 내의 시간적 순서, 하위 사건들의 내용, 하위 사건들 간의 연합 등에 대한 일화 기억을 형성한다 (Clewett, DuBrow, & Davachi, 2019). 이렇게 분할된 사건 기억이 형성되면, 사건 간/내의 시간적 순서에 대한 기억, 사건 간/내의 시간 흐름의 지각, 전체 사건의 지속 시간에 대한 추정, 사건 배경과 세부 항목 간의 연합 기억, 세부 항목 자체에 대한 재인 기억 등 일화 기억의 다양한 측면에 영향을 준다(Boundary Effect). 특히, 통합된 Event Memory 내에서는 사건 간의 Temporal Order Memory가 온전한 반면, 분리된 Event Memory 간에는 Temporal Order Memory 가 손상되는 것이 두드러지게 관찰되어왔다.
한편, 사건 기억의 형성에는 공간적, 지각적, 인지적 맥락의 변화와 안정성만이 영향을 주는 것은 아니다. 일상의 경험에는 수많은 맥락 변화가 있으나, 이 모든 것이 개별적인 일화로 지각되지는 않는다. 이는 다양한 맥락 변화가 사전 경험에 의해 예측되기 때문일 수 있다. 대부분의 일상 경험은 유사한 장소에서 유사한 순서로 진행된다. 이러한 유사성에 근거하여, 우리의 뇌는 새로운 사건이 어떻게 펼쳐질지에 대한 예측을 형성할 수 있다. 그리고 이 예측은 이어지는 정보들을 부호화하는 과정에 활용되어 일화 기억 형성에 영향을 미칠 수 있을 것이다. 구체적으로, 새롭게 경험하는 정보 흐름이 예측과 일치하면 흐름 중에 맥락 변화가 발생하더라도 하나의 사건으로 통합될 수 있다. 반면, 예측과 어긋나면 뚜렷한 맥락 변화가 없더라도 정보들이 구분되는 일화로 기억될 가능성이 있다.
이에 본 연구는 다양한 맥락 변화로 구성된 경험에서의 일화 기억 형성에 사전 경험에 의한 예측이 어떤 영향을 미치는지 살펴보고자 하였다. 총 48명의 참가자가 실험에 참여하였다. 실험은 참가자 간 요인인 공고화 집단 조건과 참가자 내 요인인 사전 경험과의 일치 여부가 조합된 혼합 요인 설계로 구성되었다. 실험 과제는 맥락 학습 및 검사, 사건 학습, 순서 검사의 3개 과제로 구성되었다. 맥락 학습 및 검사는 이어질 학습 과제의 맥락 변화에 대한 예측을 형성하기 위한 과제로, 특정 배경을 연속적으로 반복 제시 및 검사하여 참가자들이 배경 맥락 변화에서의 예측을 형성할 수 있도록 유도하였다. 이어서, 참가자들은 공고화 집단과 즉시 집단으로 구분되어 할당되었다. 공고화 집단에서는 공고화 유도를 위해 24시간 뒤 사건 학습 과제와 순서 검사 과제를 수행하였다. 즉시 집단의 참가자들은 맥락 학습 및 검사 후 즉시 사건 학습 및 순서 검사 과제를 수행하였다. 사건 학습 과제에서는 앞서 노출되었던 배경 맥락들이 천천히 변화하며 맥락 하에서 연속적으로 제시되는 여러 가지 물체들을 학습하였다. 이때, 참가자 내 요인으로 사전 맥락 학습과의 일치/불일치 여부가 조작되었다. 일치 조건에서는 배경 맥락이 사전에 경험한 순서대로 제시된 반면, 불일치 조건에서는 사전 경험과 일치하지 않는 순서로 제시되었다. 이어서 순서 검사 과제에서는 앞서 학습한 물체가 두개씩 제시되었다. 참가자들의 과제는 두 물체 중 어떤 물체가 시간적으로 우선하여 나왔는지 판단하는 것이었다.
실험 결과, 두 집단 모두에서 사건 내(Within)의 Temporal Order Memory가 Event 간(Across) 보다 더 우수한 경계 효과(Boundary Effect)가 재현되었다. 가설과 일치하게, 이러한 경계 효과(Within – Across) 는 일치(Paired) 조건에서 불일치(Non-paired) 조건보다 감소하였다. 구체적으로, 일치(Paired) 조건에서 경계 효과(Boundary Effect)의 감소는 사건 간(Across) 의 Temporal Order Memory 수행 증가에 의해 이루어졌다. 그러나 공고화 여부의 효과는 나타나지 않아 두 집단 모두에서 동일한 패턴이 관찰되었다.
set.seed(12345) # for reproducibility
options(knitr.kable.NA = '')
# install // load packages
# Some packages need to be loaded.
# We use `pacman` as a package manager, which takes care of the other packages.
if (!require("distill", quietly = TRUE)) install.packages("distill")
if (!require("devtools", quietly = TRUE)) install.packages("devtools")
if (!require("papaja", quietly = TRUE)) devtools::install_github("crsh/papaja")
if (!require("patchwork", quietly = TRUE)) devtools::install_github("thomasp85/patchwork")
if (!require("klippy", quietly = TRUE)) devtools::install_github("RLesur/klippy")
if (!require("pacman", quietly = TRUE)) install.packages("pacman")
if (!require("Rmisc", quietly = TRUE)) install.packages("Rmisc")
if (!require("ggbeeswarm", quietly = TRUE)) install.packages("ggbeeswarm") # Never load it directly.
pacman::p_load(tidyverse, papaja, knitr, dplyr, car, psych, afex, lme4, lmerTest,
emmeans, ggplot2, ggpubr, lattice, latticeExtra, parallel, effects, psycho, caret,
effectsize, rstatix)
library("patchwork"); library("klippy")
klippy::klippy()실험 1 (Immediate) & 실험 2 (Consolidated), Phase 1 Association Memory Test의 수행 변화를 분석하였다.
t1 <- read.csv("data/evMEM_p1_all.csv", header = T)
glimpse(t1, width = 70)
## Rows: 5,760
## Columns: 17
## $ SN <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ exp <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ Trial <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,…
## $ Block <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ mBlock <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,…
## $ bTrial <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,…
## $ tType <int> 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 1,…
## $ Sce1_Idx <int> 108, 49, 109, 29, 129, 179, 53, 119, 187, 224, 152…
## $ Sce2_Idx <int> 47, 77, 64, 28, 115, 52, 231, 55, 33, 235, 25, 9, …
## $ Sce3_Idx <int> 133, 236, 210, 211, 235, 151, 64, 130, 47, 243, 33…
## $ Sce1_name <chr> " sce_108.jpg", " sce_049.JPG", " sce_109.jpg", " …
## $ Sce2_name <chr> " sce_047.jpg", " sce_077.jpg", " sce_064.jpg", " …
## $ Sce3_name <chr> " sce_133.jpg", " sce_236.jpg", " sce_210.jpg", " …
## $ Ans <int> 2, 2, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2,…
## $ Resp <int> 2, 2, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2,…
## $ RT <dbl> 1.4325, 1.3060, 1.3300, 1.2963, 1.4151, 1.3705, 1.…
## $ Corr <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
t1$SN = factor(t1$SN)
t1$exp = factor(t1$exp, levels=c(1,2), labels=c("imm","cons"))
t1$Block = factor(t1$Block)
t1$mBlock = factor(t1$mBlock)
t1$tType = factor(t1$tType, levels=c(1,2), labels=c("paired","unpaired"))
t1$Sce1_Idx = factor(t1$Sce1_Idx)
t1$Sce2_Idx = factor(t1$Sce2_Idx)
t1$Sce3_Idx = factor(t1$Sce3_Idx)
# t1$RT <- t1$RT;
t1$Corr <- as.numeric(t1$Corr==1)참가자의 반응시간을 분석하였다. 분석에는 올바르게 반응한 시행만 포함되었다. 자동적 반응(<200ms)과 과도하게 늦은 반응(>10000ms)을 제거하였고, 평균으로부터 +-3SD를 넘는 시행을 가외치로 판단하여 제거하였다. 아래에 조건과 블록 반복에 따른 반응시간 변화를 요약하였다.
ct1 <- t1 %>% filter(Corr == 1) # filter(Corr == 1) # remove incorrect trial
100-100*(nrow(ct1)/nrow(t1))
## [1] 4.652778
# trimming 3sd outlier trials
tt1 <- ct1 %>% filter(RT > .200 & RT < 10.000) %>%
group_by(SN) %>% # grouping by participants
nest() %>%
mutate(lbound = map(data, ~mean(.$RT)-3*sd(.$RT)),
ubound = map(data, ~mean(.$RT)+3*sd(.$RT))) %>% # make new data (3sd cut)
unnest(c(lbound, ubound))%>%
unnest(data) %>%
mutate(Outlier = (RT < lbound)|(RT > ubound)) %>% # set outlier
filter(Outlier == FALSE) %>% # filtering outlier
ungroup() %>%
dplyr::select(SN, exp, Block, mBlock, tType, Sce1_Idx, Sce2_Idx, Sce3_Idx, RT, Corr) # select variables to analyze
# outlier trial ratio
100-100*(nrow(tt1)/nrow(ct1))
## [1] 1.383831
# RTs were trimmed
# when 1) faster than 200ms 2) slower than 10 secs 3) 3SD away from the participants mean
# mean number of trials for each conditions
tt1 %>% group_by(SN, exp, tType) %>%
summarise(NumTrial = length(RT)) %>%
ungroup() %>%
group_by(exp, tType) %>%
summarise(Mean = mean(NumTrial),
Median = median(NumTrial),
Min = min(NumTrial),
Max = max(NumTrial)) %>%
ungroup %>%
kable(digits=2)
## `summarise()` has grouped output by 'SN', 'exp'. You can override using the `.groups` argument.
## `summarise()` has grouped output by 'exp'. You can override using the `.groups` argument.| exp | tType | Mean | Median | Min | Max |
|---|---|---|---|---|---|
| imm | paired | 55.42 | 56.0 | 47 | 60 |
| imm | unpaired | 55.75 | 56.0 | 49 | 59 |
| cons | paired | 57.17 | 58.0 | 50 | 60 |
| cons | unpaired | 57.33 | 57.5 | 48 | 60 |
t1rtL <- tt1 %>% group_by(SN, exp, Block, tType) %>%
summarise(RT = mean(RT)) %>%
ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Block'. You can override using the `.groups` argument.
# t1rtL %>% kable(digits=2)
# subject-level, wide format (SN/Btw/Block)
t1rtW <- t1rtL %>% spread(key=Block, value = RT)
# t1rtW %>% kable(digits=2)
# summary table: grand mean (eyerep/locrep)
t1rtG <- t1rtL %>% group_by(exp, Block, tType) %>%
summarise(RT.m = mean(RT), RT.sd = sd(RT)) %>%
ungroup()
## `summarise()` has grouped output by 'exp', 'Block'. You can override using the `.groups` argument.
t1rtG$RT.se <- Rmisc::summarySEwithin(data = t1rtL, measurevar = "RT",
idvar = "SN", betweenvars = "exp", withinvars = c("Block", "tType"))$se
t1rtG$RT.ci <- Rmisc::summarySEwithin(data = t1rtL, measurevar = "RT",
idvar = "SN", betweenvars = "exp",withinvars = c("Block", "tType"))$ci
t1rtG <- t1rtG %>%
mutate(lower.ci = RT.m-RT.ci,
upper.ci = RT.m+RT.ci,
lower.se = RT.m-RT.se,
upper.se = RT.m+RT.se,)
t1rtG %>%
dplyr::select(exp, tType, Block, RT.m) %>%
spread(key = Block, value = RT.m) %>%
kable(digits=2)| exp | tType | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| imm | paired | 1.58 | 1.40 | 1.27 | 1.19 |
| imm | unpaired | 1.59 | 1.36 | 1.28 | 1.21 |
| cons | paired | 1.58 | 1.31 | 1.21 | 1.15 |
| cons | unpaired | 1.56 | 1.36 | 1.24 | 1.15 |
참가자들의 반응 정확도를 분석하였다.
t1acc.sn <- t1 %>% filter(Block==4) %>% group_by(SN, exp) %>%
dplyr::summarise(Acc = mean(Corr)*100) %>%
ungroup()
## `summarise()` has grouped output by 'SN'. You can override using the `.groups` argument.
ggplot() +
geom_bar(data=t1acc.sn, aes(x = SN, y = Acc, fill=exp), stat="identity") +
# ggtitle("참가자별 평균 반응시간") +
xlab("Subjects") + ylab("Accuracy") + theme_bw() +
coord_cartesian(ylim = c(80,100), clip = "on") +
scale_fill_manual(values = c("#2C57AA", "#F17402"), # c("#F17402", "#2C57AA"), c("#feb24c", "#91bfdb")
labels = c("Immediate","Consolidated")) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# legend.position = c(0.65, 0.85),
legend.position = 'top',
legend.title = element_blank(),
# aspect.ratio = 0.6,
legend.background = element_blank(),
plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
legend.key = element_blank())
# subject-level, long format (SN/Btw/Block)
t1accL <- t1 %>% group_by(SN, exp, Block, tType) %>%
dplyr::summarise(Acc = mean(Corr)*100) %>%
ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Block'. You can override using the `.groups` argument.
# t1accL %>% kable(digits=2)
# subject-level, wide format (SN/Btw/Block)
t1accW1 <- t1accL %>% spread(key=Block, value = Acc)
# t1accW1 %>% kable(digits=2)
# summary table: grand mean (eyerep/locrep)
t1accG <- t1accL %>% group_by(exp, Block, tType) %>%
summarise(Acc.m = mean(Acc), Acc.sd = sd(Acc)) %>%
ungroup()
## `summarise()` has grouped output by 'exp', 'Block'. You can override using the `.groups` argument.
t1accG$Acc.se <- Rmisc::summarySEwithin(data = t1accL, measurevar = "Acc",
idvar = "SN", betweenvars="exp",withinvars = c("Block", "tType"))$se
t1accG$Acc.ci <- Rmisc::summarySEwithin(data = t1accL, measurevar = "Acc",
idvar = "SN", betweenvars="exp",withinvars = c("Block", "tType"))$ci
t1accG <- t1accG %>%
mutate(lower.ci = Acc.m-Acc.ci,
upper.ci = Acc.m+Acc.ci,
lower.se = Acc.m-Acc.se,
upper.se = Acc.m+Acc.se)
t1accG %>%
dplyr::select(exp, tType, Block, Acc.m) %>%
spread(key = Block, value = Acc.m) %>%
kable(digits=2)| exp | tType | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| imm | paired | 88.61 | 92.78 | 96.11 | 96.67 |
| imm | unpaired | 88.89 | 94.44 | 97.50 | 96.67 |
| cons | paired | 93.89 | 96.39 | 98.06 | 98.61 |
| cons | unpaired | 93.33 | 96.94 | 97.50 | 99.17 |
# values = c("#F17402", "#2C57AA")
# values = c("darkred", "darkblue")
p1.L.rt.g <- t1rtG
p1.L.rt.g.plot1 <- ggplot(data=p1.L.rt.g ,
aes(x=Block, y=RT.m, ymin=RT.m-RT.ci, ymax=RT.m+RT.ci, color=tType, shape=tType)) +
geom_point(size = 5, position = position_dodge(.3)) +
geom_errorbar(width = .2, position = position_dodge(.3)) +
geom_line(aes(group = tType), position = position_dodge(.3), size=1) +
facet_grid(.~exp, scales="free_x", space = "free",
labeller = labeller(exp = c("imm" = "Immediate","cons" = "Consolidated"))) +
scale_color_manual(values = c("#ED7D31", "#70AD47")) + # c("red", "black")) +
# scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
coord_cartesian(ylim = c(0.500,2.000), clip = "on") +
# scale_y_continuous(breaks = seq(0,80)) +
scale_x_discrete(labels = c("1", "2", "3", "4")) +
labs(x = "Block", y = "Response Time (s)") +
theme_bw(base_size = 18) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# legend.position = c(0.65, 0.85),
legend.position = 'top',
legend.title = element_blank(),
# aspect.ratio = 0.6,
legend.background = element_blank(),
plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
legend.key = element_blank())
p1.L.rt.g.plot1p1.L.acc.g <- t1accG
p1.L.acc.g.plot1 <- ggplot(data=p1.L.acc.g ,
aes(x=Block, y=Acc.m, ymin=Acc.m-Acc.ci, ymax=Acc.m+Acc.ci, color=tType, shape=tType)) +
geom_point(size = 5, position = position_dodge(.3)) +
geom_errorbar(width = .2, position = position_dodge(.3)) +
geom_line(aes(group = tType), position = position_dodge(.3), size=1) +
facet_grid(.~exp, scales="free_x", space = "free",
labeller = labeller(exp = c("imm" = "Immediate","cons" = "Consolidated"))) +
scale_color_manual(values = c("#ED7D31", "#70AD47")) + # c("red", "black")) +
# scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
coord_cartesian(ylim = c(80,105), clip = "on") +
# scale_y_continuous(breaks = seq(0,80)) +
scale_x_discrete(labels = c("1", "2", "3", "4")) +
labs(x = "Block", y = "Accuracy (%)") +
theme_bw(base_size = 18) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# legend.position = c(0.65, 0.85),
legend.position = 'top',
legend.title = element_blank(),
# aspect.ratio = 0.6,
legend.background = element_blank(),
plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
legend.key = element_blank())
p1.L.acc.g.plot1p1.L.rt.g <- t1rtG %>% filter(Block == 4)
p1.L.rt.l <- t1rtL %>% filter(Block == 4)
p1.L.rt.w <- p1.L.rt.l %>% select(SN, exp, tType, RT) %>% spread(key =tType, value=RT)
p1.L.rt.g.plot1 <- ggplot() +
geom_hline(yintercept=0, linetype='dashed', color='gray60', alpha =1, size=1) +
geom_violin(data=p1.L.rt.l, aes(x=exp, y=RT, fill=tType), width = 0.7, trim=TRUE,
position = position_dodge(0.80), alpha = 0.15) +
geom_dotplot(data=p1.L.rt.l, aes(x=exp, y=RT, fill=tType),
binaxis = "y", stackdir = "center", stackratio = 1.3,
color = "black", alpha = 0.5, #position = "nudge",
position=position_dodge(0.8),
inherit.aes = TRUE, binwidth = 0.035) +
# geom_point(data=p1.L.rt.l, aes(x=exp, y=RT, fill=tType), size = 1,
# position = position_dodge(.8), color="gray80", show.legend = F) +
# geom_segment(data=filter(p1.L.rt.w, exp == "imm"), inherit.aes = FALSE,
# aes(x=0.8, y=filter(p1.L.rt.w, exp == "imm")$paired,
# xend=1.2, yend=filter(p1.L.rt.w, exp == "imm")$unpaired),
# color="gray90", alpha = .7) +
# geom_segment(data=filter(p1.L.rt.w, exp == "cons"), inherit.aes = FALSE,
# aes(x=1.8, y=filter(p1.L.rt.w, exp == "cons")$paired,
# xend=2.2, yend=filter(p1.L.rt.w, exp == "cons")$unpaired),
# color="gray90", alpha = .7) +
geom_pointrange(data=p1.L.rt.g, aes(x = exp, y=RT.m, ymin = RT.m-RT.ci, ymax = RT.m+RT.ci, color = tType),
position = position_dodge(0.80), size = 1.3, show.legend = TRUE) +
scale_fill_manual(values = c("#ED7D31", "#70AD47")) +
scale_color_manual(values = c("#ED7D31", "#70AD47")) +
# scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
coord_cartesian(ylim = c(0.500,2.000), clip = "on") +
# scale_y_continuous(breaks = seq(0,80)) +
scale_x_discrete(labels = c("Immediate", "Consolidated")) +
labs(x = "Condition", y = "Response Time (ms)") +
theme_bw(base_size = 18) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# legend.position = c(0.65, 0.85),
legend.position = "top",
legend.title = element_blank(),
# aspect.ratio = 0.6,
legend.background = element_blank(),
plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
legend.key = element_blank())
p1.L.rt.g.plot1p1.L.acc.g <- t1accG %>% filter(Block == 4)
p1.L.acc.l <- t1accL %>% filter(Block == 4)
p1.L.acc.w <- p1.L.acc.l %>% select(SN, exp, tType, Acc) %>% spread(key =tType, value=Acc)
p1.L.acc.g.plot1 <- ggplot() +
# geom_hline(yintercept=0, linetype='dashed', color='gray60', alpha =1, size=1) +
geom_violin(data=p1.L.acc.l, aes(x=exp, y=Acc, fill=tType), width = 0.7, trim=TRUE,
position = position_dodge(0.80), alpha = 0.15) +
geom_dotplot(data=p1.L.acc.l, aes(x=exp, y=Acc, fill=tType),
binaxis = "y", stackdir = "center", stackratio = 1.3,
color = "black", alpha = 0.5, #position = "nudge",
position=position_dodge(0.8),
inherit.aes = TRUE, binwidth = 0.1) +
# geom_point(data=p1.L.acc.l, aes(x=exp, y=Acc, fill=tType), size = 1,
# position = position_dodge(.8), color="gray80", show.legend = F) +
# geom_segment(data=filter(p1.L.acc.w, exp == "imm"), inherit.aes = FALSE,
# aes(x=0.8, y=filter(p1.L.acc.w, exp == "imm")$paired,
# xend=1.2, yend=filter(p1.L.acc.w, exp == "imm")$unpaired),
# color="gray90", alpha = .7) +
# geom_segment(data=filter(p1.L.acc.w, exp == "cons"), inherit.aes = FALSE,
# aes(x=1.8, y=filter(p1.L.acc.w, exp == "cons")$paired,
# xend=2.2, yend=filter(p1.L.acc.w, exp == "cons")$unpaired),
# color="gray90", alpha = .7) +
geom_pointrange(data=p1.L.acc.g, aes(x = exp, y=Acc.m, ymin = Acc.m-Acc.ci, ymax = Acc.m+Acc.ci, color = tType),
position = position_dodge(0.80), size = 1.3, show.legend = TRUE) +
scale_color_manual(values = c("#ED7D31", "#70AD47")) +
scale_fill_manual(values = c("#ED7D31", "#70AD47")) +
# scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
coord_cartesian(ylim = c(80,105), clip = "on") +
# scale_y_continuous(breaks = seq(0,80)) +
scale_x_discrete(labels = c("Immediate", "Consolidated")) +
labs(x = "Condition", y = "Accuracy (%)") +
theme_bw(base_size = 18) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# legend.position = c(0.65, 0.85),
legend.position = "top",
legend.title = element_blank(),
# aspect.ratio = 0.6,
legend.background = element_blank(),
plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
legend.key = element_blank())
p1.L.acc.g.plot1# fig1_2.behav <- ggarrange(p1.L.rt.g.plot1, p1.L.acc.g.plot1, nrow = 2)
# fig1_2.behavp1.L.rt.g <- t1rtG %>% filter(Block == 4)
p1.L.rt.l <- t1rtL %>% filter(Block == 4)
p1.L.rt.w <- p1.L.rt.l %>% select(SN, exp, tType, RT) %>% spread(key =exp, value=RT)
p1.L.rt.g.plot3 <- ggplot() +
# geom_hline(yintercept=0, linetype='dashed', color='gray60', alpha =1, size=1) +
geom_violin(data= p1.L.rt.l, aes(x = tType, y=RT, fill = exp), width = 0.7, trim=TRUE,
position = position_dodge(0.80), alpha = 0.15) +
# ggbeeswarm::geom_quasirandom(data= p1.L.rt.l, aes(x = tType, y=RT, color = exp, fill = exp),
# size = 3, alpha = 0.2, width = 0.2, #color = "blue",
# position = "dodge") +
geom_dotplot(data= p1.L.rt.l, aes(x = tType, y=RT, fill = exp),
binaxis = "y", stackdir = "center", stackratio = 1.3,
color = "black", alpha = 0.5, position = position_dodge(0.80),
inherit.aes = TRUE, binwidth = 0.03, show.legend = FALSE) +
geom_pointrange(data=p1.L.rt.g, aes(x = tType, y=RT.m, ymin = RT.m-RT.ci, ymax = RT.m+RT.ci, color = exp),
position = position_dodge(0.80), size = 1.3, show.legend = T, alpha = 1) +
scale_color_manual(values = c("#2C57AA","#F17402"),
labels = c("Immediate", "Consolidated")) +
scale_fill_manual(values = c("#2C57AA","#F17402"),
labels = c("Immediate", "Consolidated")) +
# scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
coord_cartesian(ylim = c(0.500,2.000), clip = "on") +
# scale_y_continuous(breaks = seq(0,80)) +
scale_x_discrete(labels = c("Paired", "Unpaired")) +
labs(x = "Condition", y = "Response Time (ms)") +
theme_bw(base_size = 18) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# legend.position = c(0.65, 0.85),
legend.position = "top",
legend.title = element_blank(),
# aspect.ratio = 0.6,
legend.background = element_blank(),
plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
legend.key = element_blank())
p1.L.rt.g.plot3p1.L.acc.g <- t1accG %>% filter(Block == 4)
p1.L.acc.l <- t1accL %>% filter(Block == 4)
p1.L.acc.w <- p1.L.acc.l %>% select(SN, exp, tType, Acc) %>% spread(key =exp, value=Acc)
p1.L.acc.g.plot3 <- ggplot() +
# geom_hline(yintercept=0, linetype='dashed', color='gray60', alpha =1, size=1) +
geom_violin(data= p1.L.acc.l, aes(x = tType, y=Acc, fill = exp), width = 0.7, trim=TRUE,
position = position_dodge(0.80), alpha = 0.15) +
# ggbeeswarm::geom_quasirandom(data= p1.L.acc.l, aes(x = tType, y=Acc, color = exp, fill = exp),
# size = 3, alpha = 0.2, width = 0.2, #color = "blue",
# position = "dodge") +
geom_dotplot(data= p1.L.acc.l, aes(x = tType, y=Acc, fill = exp),
binaxis = "y", stackdir = "center", stackratio = 1.3,
color = "black", alpha = 0.5, position = position_dodge(0.80),
inherit.aes = TRUE, binwidth = 0.1, show.legend = FALSE) +
geom_pointrange(data=p1.L.acc.g, aes(x = tType, y=Acc.m, ymin = Acc.m-Acc.ci, ymax = Acc.m+Acc.ci, color = exp),
position = position_dodge(0.80), size = 1.3, show.legend = T, alpha = 1) +
scale_color_manual(values = c("#2C57AA","#F17402"),
labels = c("Immediate", "Consolidated")) +
scale_fill_manual(values = c("#2C57AA","#F17402"),
labels = c("Immediate", "Consolidated")) +
# scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
coord_cartesian(ylim = c(80,105), clip = "on") +
# scale_y_continuous(breaks = seq(0,80)) +
scale_x_discrete(labels = c("Paired", "Unpaired")) +
labs(x = "Condition", y = "Accuracy (%)") +
theme_bw(base_size = 18) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# legend.position = c(0.65, 0.85),
legend.position = "top",
legend.title = element_blank(),
# aspect.ratio = 0.6,
legend.background = element_blank(),
plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
legend.key = element_blank())
p1.L.acc.g.plot3# fig1_3.behav <- ggarrange(p1.L.rt.g.plot3, p1.L.acc.g.plot3, nrow = 2)
# fig1_3.behav마지막 블록에서 공고화 여부 (Immediate & Consolidated)와 사전 경험 일치 여부 (Paired & Non-paired)를 요인으로 반응 시간에 대한 factorial ANOVA 및 post-hoc 수행하였다.
p1.rt.aov <- aov_ez(id="SN", dv="RT", data = p1.L.rt.l, between = "exp", within = c("tType"))
## Contrasts set to contr.sum for the following variables: exp
nice(p1.rt.aov, es="pes") %>% kable(digits=3)| Effect | df | MSE | F | pes | p.value |
|---|---|---|---|---|---|
| exp | 1, 46 | 0.06 | 1.09 | .023 | .301 |
| tType | 1, 46 | 0.01 | 0.41 | .009 | .523 |
| exp:tType | 1, 46 | 0.01 | 0.26 | .006 | .610 |
p_h1 <- p1.L.rt.l %>%
group_by(exp) %>%
rstatix::pairwise_t_test(RT ~ tType,
p.adjust.method="bonferroni",
paired=T, detailed=T) %>%
dplyr::select(exp, group1, group2, estimate, conf.low, conf.high, df, statistic, p.adj, p.adj.signif)
p_h2 <- p1.L.rt.l %>%
group_by(exp) %>%
rstatix::cohens_d(RT ~ tType, paired=T, ci = F) %>%
dplyr::select(exp, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("exp", "group1", "group2")) %>% kable(digits=3)| exp | group1 | group2 | estimate | conf.low | conf.high | df | statistic | p.adj | p.adj.signif | effsize | magnitude |
|---|---|---|---|---|---|---|---|---|---|---|---|
| cons | paired | unpaired | -0.002 | -0.045 | 0.040 | 23 | -0.121 | 0.905 | ns | -0.025 | negligible |
| imm | paired | unpaired | -0.022 | -0.089 | 0.045 | 23 | -0.686 | 0.500 | ns | -0.140 | negligible |
p_h1 <- p1.L.rt.l %>%
group_by(tType) %>%
rstatix::t_test(RT ~ exp,
paired=F, detailed=T, var.equal = T) %>%
dplyr::select(tType, group1, group2, estimate, conf.low, conf.high, df, statistic, p)
p_h2 <- p1.L.rt.l %>%
group_by(tType) %>%
rstatix::cohens_d(RT ~ exp, paired=F, ci = F) %>%
dplyr::select(tType, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("tType", "group1", "group2")) %>% kable(digits=3)| tType | group1 | group2 | estimate | conf.low | conf.high | df | statistic | p | effsize | magnitude |
|---|---|---|---|---|---|---|---|---|---|---|
| paired | imm | cons | 0.043 | -0.062 | 0.147 | 46 | 0.818 | 0.418 | 0.236 | small |
| unpaired | imm | cons | 0.062 | -0.049 | 0.173 | 46 | 1.127 | 0.265 | 0.325 | small |
마지막 블록에서 공고화 여부 (Immediate & Consolidated)와 사전 경험 일치 여부 (Paired & Non-paired)를 요인으로 정확도에 대한 factorial ANOVA 및 post-hoc 수행하였다.
p1.acc.aov <- aov_ez(id="SN", dv="Acc", data = p1.L.acc.l, between = "exp", within = c("tType"))
## Contrasts set to contr.sum for the following variables: exp
nice(p1.acc.aov, es="pes") %>% kable(digits=3)| Effect | df | MSE | F | pes | p.value |
|---|---|---|---|---|---|
| exp | 1, 46 | 25.76 | 4.60 * | .091 | .037 |
| tType | 1, 46 | 9.58 | 0.19 | .004 | .662 |
| exp:tType | 1, 46 | 9.58 | 0.19 | .004 | .662 |
p_h1 <- p1.L.acc.l %>%
group_by(exp) %>%
rstatix::pairwise_t_test(Acc ~ tType,
p.adjust.method="bonferroni",
paired=T, detailed=T) %>%
dplyr::select(exp, group1, group2, estimate, conf.low, conf.high, df, statistic, p.adj, p.adj.signif)
p_h2 <- p1.L.acc.l %>%
group_by(exp) %>%
rstatix::cohens_d(Acc ~ tType, paired=T, ci = F) %>%
dplyr::select(exp, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("exp", "group1", "group2")) %>% kable(digits=3)| exp | group1 | group2 | estimate | conf.low | conf.high | df | statistic | p.adj | p.adj.signif | effsize | magnitude |
|---|---|---|---|---|---|---|---|---|---|---|---|
| cons | paired | unpaired | -0.556 | -2.198 | 1.087 | 23 | -0.7 | 0.491 | ns | -0.143 | negligible |
| imm | paired | unpaired | 0.000 | -2.033 | 2.033 | 23 | 0.0 | 1.000 | ns | 0.000 | negligible |
p_h1 <- p1.L.acc.l %>%
group_by(tType) %>%
rstatix::t_test(Acc ~ exp,
paired=F, detailed=T, var.equal = T) %>%
dplyr::select(tType, group1, group2, estimate, conf.low, conf.high, df, statistic, p)
p_h2 <- p1.L.acc.l %>%
group_by(tType) %>%
rstatix::cohens_d(Acc ~ exp, paired=F, ci = F) %>%
dplyr::select(tType, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("tType", "group1", "group2")) %>% kable(digits=3)| tType | group1 | group2 | estimate | conf.low | conf.high | df | statistic | p | effsize | magnitude |
|---|---|---|---|---|---|---|---|---|---|---|
| paired | imm | cons | -1.944 | -4.496 | 0.607 | 46 | -1.534 | 0.132 | -0.443 | small |
| unpaired | imm | cons | -2.500 | -4.829 | -0.171 | 46 | -2.161 | 0.036 | -0.624 | moderate |
공고화 여부 (Immediate & Consolidated)와 사전 경험 일치 여부 (Paired & Non-paired)에 따른 Phase 2 Event Memory Test의 수행 결과를 분석하였다.
t2 <- read.csv("data/evMEM_p2_all.csv", header = T)
glimpse(t2, width = 70)
## Rows: 11,520
## Columns: 17
## $ SN <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ exp <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ Trial <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …
## $ Block <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ bTrial <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …
## $ Cont <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ Sch <int> 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, …
## $ Im1_pos <int> 27, 15, 6, 16, 8, 20, 26, 32, 5, 17, 2, 4, 13, 18, …
## $ Im2_pos <int> 31, 19, 10, 20, 12, 24, 30, 36, 9, 21, 6, 8, 17, 22…
## $ Im1_Idx <int> 221, 276, 388, 26, 88, 129, 367, 176, 109, 392, 183…
## $ Im2_Idx <int> 287, 296, 225, 129, 110, 125, 328, 325, 227, 77, 38…
## $ Im1_name <chr> " obj_228.jpg", " obj_283.jpg", " obj_397.jpg", " o…
## $ Im2_name <chr> " obj_294.jpg", " obj_304.jpg", " obj_232.jpg", " o…
## $ Ans <int> 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, …
## $ Resp <int> 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, …
## $ RT <dbl> 2.5424, 2.7890, 2.1054, 4.8810, 1.9130, 1.3525, 1.1…
## $ Corr <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
# check number of trials for each condition/SN
table(t2$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
## 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
## 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
## 41 42 43 44 45 46 47 48
## 240 240 240 240 240 240 240 240
table(t2$Block, t2$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## 1 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 2 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 3 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 4 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 5 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 6 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 7 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 8 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 9 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 10 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##
## 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
## 1 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 2 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 3 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 4 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 5 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 6 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 7 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 8 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 9 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
## 10 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
table(t2$Cont, t2$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 1 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120
## 2 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120
##
## 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
## 1 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120
## 2 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120
##
## 39 40 41 42 43 44 45 46 47 48
## 1 120 120 120 120 120 120 120 120 120 120
## 2 120 120 120 120 120 120 120 120 120 120
# change class of main factors: double to factor
t2$SN = factor(t2$SN)
t2$exp = factor(t2$exp, levels=c(1,2), labels=c("imm","cons"))
t2$Block = factor(t2$Block)
t2$Cont = factor(t2$Cont, levels=c(1,2), labels=c("paired","unpaired")) # for afex
t2$Sch = factor(t2$Sch, levels=c(1, 2), labels=c("within", "across"))
t2$Im_comb = t2$Im1_pos + t2$Im2_pos
t2$Im_comb = factor(t2$Im_comb)
t2$Im1_pos = factor(t2$Im1_pos)
t2$Im2_pos = factor(t2$Im2_pos)
t2$Im1_Idx = factor(t2$Im1_Idx)
t2$Im2_Idx = factor(t2$Im2_Idx)
t2$Ans = factor(t2$Ans)
t2$RT <- t2$RT; t2$Corr <- as.numeric(t2$Corr==1)
t2$evPos <- 0
t2[t2$Sch=="within",]$evPos <- 1
t2[t2$Im1_pos==1,]$evPos <- 1
t2[t2$Im1_pos==2,]$evPos <- 1
t2[t2$Im1_pos==7,]$evPos <- 2
t2[t2$Im1_pos==8,]$evPos <- 2
t2[t2$Im1_pos==13,]$evPos <- 3
t2[t2$Im1_pos==14,]$evPos <- 3
t2[t2$Im1_pos==19,]$evPos <- 4
t2[t2$Im1_pos==20,]$evPos <- 4
t2[t2$Im1_pos==25,]$evPos <- 5
t2[t2$Im1_pos==26,]$evPos <- 5
t2[t2$Im1_pos==31,]$evPos <- 6
t2[t2$Im1_pos==32,]$evPos <- 6
# t2[t2$Im1_pos==1,]$evPos <- 1
# t2[t2$Im1_pos==2,]$evPos <- 1
# t2[t2$Im1_pos==7,]$evPos <- 2
# t2[t2$Im1_pos==8,]$evPos <- 2
# t2[t2$Im1_pos==13,]$evPos <- 1
# t2[t2$Im1_pos==14,]$evPos <- 1
# t2[t2$Im1_pos==19,]$evPos <- 2
# t2[t2$Im1_pos==20,]$evPos <- 2
# t2[t2$Im1_pos==25,]$evPos <- 1
# t2[t2$Im1_pos==26,]$evPos <- 1
# t2[t2$Im1_pos==31,]$evPos <- 2
# t2[t2$Im1_pos==32,]$evPos <- 2
t2[t2$Sch=="across",]$evPos <- 1
t2[t2$Im1_pos==1,]$evPos <- 1
t2[t2$Im1_pos==2,]$evPos <- 1
t2[t2$Im1_pos==7,]$evPos <- 1
t2[t2$Im1_pos==8,]$evPos <- 1
t2[t2$Im1_pos==13,]$evPos <- 2
t2[t2$Im1_pos==14,]$evPos <- 2
t2[t2$Im1_pos==19,]$evPos <- 2
t2[t2$Im1_pos==20,]$evPos <- 2
t2[t2$Im1_pos==25,]$evPos <- 3
t2[t2$Im1_pos==26,]$evPos <- 3
t2[t2$Im1_pos==31,]$evPos <- 3
t2[t2$Im1_pos==32,]$evPos <- 3
t2[t2$Im1_pos==3,]$evPos <- 1
t2[t2$Im1_pos==4,]$evPos <- 1
t2[t2$Im1_pos==5,]$evPos <- 1
t2[t2$Im1_pos==6,]$evPos <- 1
t2[t2$Im1_pos==15,]$evPos <- 2
t2[t2$Im1_pos==16,]$evPos <- 2
t2[t2$Im1_pos==17,]$evPos <- 2
t2[t2$Im1_pos==18,]$evPos <- 2
t2[t2$Im1_pos==27,]$evPos <- 3
t2[t2$Im1_pos==28,]$evPos <- 3
t2[t2$Im1_pos==29,]$evPos <- 3
t2[t2$Im1_pos==30,]$evPos <- 3
headTail(t2)
## SN exp Trial Block bTrial Cont Sch Im1_pos Im2_pos Im1_Idx
## 1 1 imm 1 1 1 paired across 27 31 221
## 2 1 imm 2 1 2 paired across 15 19 276
## 3 1 imm 3 1 3 paired across 6 10 388
## 4 1 imm 4 1 4 paired across 16 20 26
## ... <NA> <NA> ... <NA> ... <NA> <NA> <NA> <NA> <NA>
## 11517 48 cons 237 10 21 paired within 20 24 171
## 11518 48 cons 238 10 22 paired within 1 5 192
## 11519 48 cons 239 10 23 paired across 15 19 156
## 11520 48 cons 240 10 24 paired within 13 17 162
## Im2_Idx Im1_name Im2_name Ans Resp RT Corr Im_comb evPos
## 1 287 obj_228.jpg obj_294.jpg 2 2 2.54 1 58 3
## 2 296 obj_283.jpg obj_304.jpg 2 2 2.79 1 34 2
## 3 225 obj_397.jpg obj_232.jpg 1 1 2.11 1 16 1
## 4 129 obj_026.jpg obj_133.jpg 2 2 4.88 1 36 2
## ... <NA> <NA> <NA> <NA> ... ... ... <NA> ...
## 11517 202 obj_196.jpg obj_228.jpg 2 2 2.01 1 44 2
## 11518 267 obj_218.jpg obj_295.jpg 1 1 33.92 1 6 1
## 11519 383 obj_179.jpg obj_422.jpg 1 1 14.87 1 34 2
## 11520 79 obj_185.jpg obj_091.jpg 2 2 7.04 1 30 2
glimpse(t2, width = 70)
## Rows: 11,520
## Columns: 19
## $ SN <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ exp <fct> imm, imm, imm, imm, imm, imm, imm, imm, imm, imm, i…
## $ Trial <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …
## $ Block <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ bTrial <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …
## $ Cont <fct> paired, paired, paired, paired, paired, paired, pai…
## $ Sch <fct> across, across, across, across, within, within, wit…
## $ Im1_pos <fct> 27, 15, 6, 16, 8, 20, 26, 32, 5, 17, 2, 4, 13, 18, …
## $ Im2_pos <fct> 31, 19, 10, 20, 12, 24, 30, 36, 9, 21, 6, 8, 17, 22…
## $ Im1_Idx <fct> 221, 276, 388, 26, 88, 129, 367, 176, 109, 392, 183…
## $ Im2_Idx <fct> 287, 296, 225, 129, 110, 125, 328, 325, 227, 77, 38…
## $ Im1_name <chr> " obj_228.jpg", " obj_283.jpg", " obj_397.jpg", " o…
## $ Im2_name <chr> " obj_294.jpg", " obj_304.jpg", " obj_232.jpg", " o…
## $ Ans <fct> 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, …
## $ Resp <int> 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, …
## $ RT <dbl> 2.5424, 2.7890, 2.1054, 4.8810, 1.9130, 1.3525, 1.1…
## $ Corr <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ Im_comb <fct> 58, 34, 16, 36, 20, 44, 56, 68, 14, 38, 8, 12, 30, …
## $ evPos <dbl> 3, 2, 1, 2, 1, 2, 3, 3, 1, 2, 1, 1, 2, 2, 3, 2, 1, …Temporal Order Memory에서의 경계 효과(Boundary Effect)는 사건 내(Within)의 Temporal Order Memory가 Event 간(Across) 보다 더 우수한 것으로 나타난다. 공고화 여부와 일치 여부에 따른 Boundary Effect를 분석하였다.
t2acc.sn <- t2 %>% group_by(SN, exp) %>%
dplyr::summarise(Acc = mean(Corr)*100) %>%
ungroup()
## `summarise()` has grouped output by 'SN'. You can override using the `.groups` argument.
ggplot() +
geom_bar(data=t2acc.sn, aes(x = SN, y = Acc, fill=exp), stat="identity") +
# ggtitle("참가자별 평균 반응시간") +
xlab("Subjects") + ylab("Accuracy") + theme_bw() +
coord_cartesian(ylim = c(50,100), clip = "on") +
scale_fill_manual(values = c("#2C57AA", "#F17402"), # c("#F17402", "#2C57AA"), c("#feb24c", "#91bfdb")
labels = c("Immediate","Consolidated")) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# legend.position = c(0.65, 0.85),
legend.position = 'top',
legend.title = element_blank(),
# aspect.ratio = 0.6,
legend.background = element_blank(),
plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
legend.key = element_blank())
t2accL <- t2 %>% group_by(SN, exp, Cont, Sch) %>%
dplyr::summarise(Acc = mean(Corr)*100) %>%
ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Cont'. You can override using the `.groups` argument.
# t2accL %>% kable(digits=2)
# subject-level, wide format (SN/Btw/Block)
t2accW1 <- t2accL %>% spread(key=Cont, value = Acc)
# t2accW1 %>% kable(digits=2)
t2accW2 <- t2accL %>% spread(key=Sch, value = Acc)
# t2accW2 %>% kable(digits=2)
# summary table: grand mean (eyerep/locrep)
t2accG <- t2accL %>% group_by(exp, Cont, Sch) %>%
summarise(Acc.m = mean(Acc), Acc.sd = sd(Acc)) %>%
ungroup()
## `summarise()` has grouped output by 'exp', 'Cont'. You can override using the `.groups` argument.
t2accG$Acc.se <- Rmisc::summarySEwithin(data = t2accL, measurevar = "Acc",
idvar = "SN", betweenvars = "exp", withinvars = c("Cont", "Sch"))$se
t2accG$Acc.ci <- Rmisc::summarySEwithin(data = t2accL, measurevar = "Acc",
idvar = "SN", betweenvars = "exp", withinvars = c("Cont", "Sch"))$ci
t2accG <- t2accG %>%
mutate(lower.ci = Acc.m-Acc.ci,
upper.ci = Acc.m+Acc.ci,
lower.se = Acc.m-Acc.se,
upper.se = Acc.m+Acc.se)
# for between-subject design. check help(summarySE)
t2accG %>% dplyr::select(exp, Cont, Sch, Acc.m) %>%
spread(key=Sch, value=Acc.m) %>%
kable(digits=2)| exp | Cont | within | across |
|---|---|---|---|
| imm | paired | 77.29 | 68.75 |
| imm | unpaired | 76.74 | 63.82 |
| cons | paired | 85.07 | 79.44 |
| cons | unpaired | 84.44 | 74.58 |
그래프
t2.plot1 <- ggplot(data=t2accL, aes(x=Cont, y=Acc, fill=Sch)) +
stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .9,
width = 0.8, size = 0.2, color="black") + # , show.legend = FALSE, colour="black",
geom_point(data=t2accL, aes(x=Cont, y=Acc, fill=Sch),
position=position_dodge(width = 0.8),
size=2, show.legend = FALSE, color="gray90", alpha = .9) + # ,
geom_segment(data=filter(t2accW2, Cont == "paired"), inherit.aes = FALSE,
aes(x=0.8, y=filter(t2accW2, Cont == "paired")$`within`,
xend=1.2, yend=filter(t2accW2, Cont == "paired")$across),
color="gray90", alpha = .9) +
geom_segment(data=filter(t2accW2, Cont == "unpaired"), inherit.aes = FALSE,
aes(x=1.8, y=filter(t2accW2, Cont =="unpaired")$`within`,
xend=2.2, yend=filter(t2accW2, Cont =="unpaired")$across),
color="gray90", alpha = .9) +
geom_errorbar(data=t2accG, aes(y = Acc.m, ymin = lower.ci, ymax = upper.ci), width=.2,
position=position_dodge(.8), color = "black") +
facet_grid(.~exp, scales="free_x", space = "free",
labeller = labeller(exp = c("imm" = "Immediate","cons" = "Consolidated"))) +
scale_x_discrete(labels=c("Paired","Non-paired")) +
scale_fill_manual(values = c("#feb24c", "#91bfdb"),
labels = c("Within", "Across")) +
coord_cartesian(ylim = c(0, 120), clip = "on") +
scale_y_continuous(breaks = c(0,25,50,75,100)) +
labs(x = "Context Condition", y = "Recency Accuracy (%)", fill ="Boundary Condition") +
# ggtitle("Association Memory Accuracy") +
theme_bw(base_size = 15) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# aspect.ratio = 0.2,
plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
# plot.title = element_text(hjust = 0.5),
legend.position="top")
t2.plot1# across 조건별
t2.plot2 <- ggplot(data=t2accL, aes(x=Sch, y=Acc, fill=Cont)) +
stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .9,
width = 0.8, size = 0.2, color="black") + # , show.legend = FALSE, colour="black",
geom_point(data=t2accL, position=position_dodge(0.80), color="gray90", alpha = .9,
size=2, show.legend = FALSE) +
geom_segment(data=filter(t2accW1, Sch == "within"), inherit.aes = FALSE,
aes(x=0.8, y=filter(t2accW1, Sch == "within")$paired,
xend=1.2, yend=filter(t2accW1, Sch == "within")$unpaired),
color="gray90", alpha = .9) +
geom_segment(data=filter(t2accW1, Sch == "across"), inherit.aes = FALSE,
aes(x=1.8, y=filter(t2accW1, Sch == "across")$paired,
xend=2.2, yend=filter(t2accW1, Sch == "across")$unpaired),
color="gray90", alpha = .9) +
geom_errorbar(data=t2accG, aes(y = Acc.m, ymin = lower.ci, ymax = upper.ci), width=.2,
position=position_dodge(.8), color = "black") +
facet_grid(.~exp, scales="free_x", space = "free",
labeller = labeller(exp = c("imm" = "Immediate","cons" = "Consolidated"))) +
scale_x_discrete(labels=c("Within", "Across")) +
scale_fill_manual(values = c("#ED7D31", "#70AD47"),
labels = c("Paired", "Non-paired")) +
# scale_fill_manual(values = c("#D2E6BD", "#4AA7B4"), # , "#235796"
# labels = c("Paired", "Non-paired")) +
coord_cartesian(ylim = c(0, 140), clip = "on") +
scale_y_continuous(breaks = c(0,25,50,75,100)) +
labs(x = "Boundary Condition", y = "Recency Accuracy (%)", fill ="Context Condition") +
# ggtitle("Association Memory Accuracy") +
theme_bw(base_size = 15) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# aspect.ratio = 0.2,
plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
# plot.title = element_text(hjust = 0.5),
legend.position="top")
t2.plot2t2.plot3 <- ggplot(data=t2accL, aes(x=Cont, y=Acc, fill=exp)) +
geom_violin(data= t2accL, aes(x = Cont, y=Acc, fill = exp), width = 0.7, trim=TRUE,
position = position_dodge(0.80), alpha = 0.15) +
# stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .9,
# width = 0.8, size = 0.2, color="black") + # , show.legend = FALSE, colour="black",
geom_dotplot(data=t2accL, aes(x=Cont, y=Acc, fill=exp),
binaxis = "y", stackdir = "center", stackratio = 1.2,
color = "black", alpha = 0.5, #position = "nudge",
position=position_dodge(0.8),
inherit.aes = TRUE, binwidth = 1.2) +
geom_point(data=t2accG, aes(y = Acc.m, x = Cont, color=exp),
position=position_dodge(.8),
size = 4, show.legend = F) +
geom_errorbar(data=t2accG, aes(y = Acc.m, ymin = lower.ci, ymax = upper.ci), width=.2,
position=position_dodge(.8), color = "black") +
facet_grid(.~Sch, scales="free_x", space = "free") +
scale_x_discrete(labels=c("Within", "Across")) +
scale_fill_manual(values = c("#2C57AA","#F17402"),
labels = c("Immediate", "Consolidated")) +
scale_color_manual(values = c("#2C57AA","#F17402"),
labels = c("Immediate", "Consolidated")) +
# scale_fill_manual(values = c("#D2E6BD", "#4AA7B4"), # , "#235796"
# labels = c("Paired", "Non-paired")) +
coord_cartesian(ylim = c(0, 120), clip = "on") +
scale_y_continuous(breaks = c(0,25,50,75,100)) +
labs(x = "Boundary Condition", y = "Recency Accuracy (%)", fill ="Context Condition") +
# ggtitle("Association Memory Accuracy") +
theme_bw(base_size = 15) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# aspect.ratio = 0.2,
plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
# plot.title = element_text(hjust = 0.5),
legend.position="top")
t2.plot3공고화 여부 x 일치 여부 x 경계 조건에 따른 Factorial ANOVA 및 Post-hoc 수행
t2.acc.aov1 <- aov_ez(id="SN", dv = "Acc", data = t2accL, between = "exp",within = c("Cont","Sch"))
## Contrasts set to contr.sum for the following variables: exp
# test_sphericity(t2.acc.aov1)
nice(t2.acc.aov1, es="pes")
## Anova Table (Type 3 tests)
##
## Response: Acc
## Effect df MSE F pes p.value
## 1 exp 1, 46 456.70 8.97 ** .163 .004
## 2 Cont 1, 46 25.42 14.21 *** .236 <.001
## 3 exp:Cont 1, 46 25.42 0.00 <.001 >.999
## 4 Sch 1, 46 48.94 83.67 *** .645 <.001
## 5 exp:Sch 1, 46 48.94 2.19 .045 .146
## 6 Cont:Sch 1, 46 18.35 12.12 ** .209 .001
## 7 exp:Cont:Sch 1, 46 18.35 0.00 <.001 .955
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
p_h1 <- t2accL %>%
group_by(exp, Cont) %>%
rstatix::pairwise_t_test(Acc ~ Sch,
p.adjust.method="bonferroni",
paired=T, detailed=T) %>%
dplyr::select(exp, Cont, group1, group2, estimate, conf.low, conf.high, df, statistic, p.adj, p.adj.signif)
p_h2 <- t2accL %>%
group_by(exp, Cont) %>%
rstatix::cohens_d(Acc ~ Sch, paired=T, ci = F) %>%
dplyr::select(exp, Cont, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("exp", "Cont", "group1", "group2")) %>% kable(digits=3)| exp | Cont | group1 | group2 | estimate | conf.low | conf.high | df | statistic | p.adj | p.adj.signif | effsize | magnitude |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cons | paired | within | across | 5.625 | 1.629 | 9.621 | 23 | 2.912 | 0.008 | ** | 0.594 | moderate |
| cons | unpaired | within | across | 9.861 | 5.848 | 13.874 | 23 | 5.083 | 0.000 | **** | 1.038 | large |
| imm | paired | within | across | 8.542 | 5.914 | 11.169 | 23 | 6.725 | 0.000 | **** | 1.373 | large |
| imm | unpaired | within | across | 12.917 | 9.915 | 15.919 | 23 | 8.901 | 0.000 | **** | 1.817 | large |
p_h1 <- t2accL %>%
group_by(exp, Sch) %>%
rstatix::pairwise_t_test(Acc ~ Cont,
p.adjust.method="bonferroni",
paired=T, detailed=T) %>%
dplyr::select(exp, Sch, group1, group2, estimate, conf.low, conf.high, df, statistic, p.adj, p.adj.signif)
p_h2 <- t2accL %>%
group_by(exp, Sch) %>%
rstatix::cohens_d(Acc ~ Cont, paired=T, ci = F) %>%
dplyr::select(exp, Sch, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("exp", "Sch", "group1", "group2")) %>% kable(digits=3)| exp | Sch | group1 | group2 | estimate | conf.low | conf.high | df | statistic | p.adj | p.adj.signif | effsize | magnitude |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cons | across | paired | unpaired | 4.861 | 1.580 | 8.142 | 23 | 3.065 | 0.005 | ** | 0.626 | moderate |
| cons | within | paired | unpaired | 0.625 | -1.838 | 3.088 | 23 | 0.525 | 0.605 | ns | 0.107 | negligible |
| imm | across | paired | unpaired | 4.931 | 1.794 | 8.067 | 23 | 3.251 | 0.004 | ** | 0.664 | moderate |
| imm | within | paired | unpaired | 0.556 | -1.578 | 2.689 | 23 | 0.539 | 0.595 | ns | 0.110 | negligible |
p_h1 <- t2accL %>%
group_by(Cont, Sch) %>%
rstatix::t_test(Acc ~ exp,
paired=F, detailed=T, var.equal = T) %>%
dplyr::select(Cont, Sch, group1, group2, estimate, conf.low, conf.high, df, statistic, p)
p_h2 <- t2accL %>%
group_by(Cont, Sch) %>%
rstatix::cohens_d(Acc ~ exp, paired=F, ci = F) %>%
dplyr::select(Cont, Sch, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("Cont", "Sch", "group1", "group2")) %>% kable(digits=3)| Cont | Sch | group1 | group2 | estimate | conf.low | conf.high | df | statistic | p | effsize | magnitude |
|---|---|---|---|---|---|---|---|---|---|---|---|
| paired | across | imm | cons | -10.694 | -17.822 | -3.567 | 46 | -3.020 | 0.004 | -0.872 | large |
| paired | within | imm | cons | -7.778 | -14.603 | -0.953 | 46 | -2.294 | 0.026 | -0.662 | moderate |
| unpaired | across | imm | cons | -10.764 | -17.632 | -3.896 | 46 | -3.155 | 0.003 | -0.911 | large |
| unpaired | within | imm | cons | -7.708 | -14.107 | -1.309 | 46 | -2.425 | 0.019 | -0.700 | moderate |
### GLMM - afex
(nc <- detectCores())
## [1] 8
cl <- makeCluster(rep("localhost", nc))
# t2.acc.glmixed <- afex::mixed(Corr ~ Cont*Sch*exp + (Cont*Sch|SN) + (Cont*Sch|Im_comb),
t2.acc.glmixed <- afex::mixed(Corr ~ Cont*Sch*exp + (1|SN) + (1|Im_comb) + (1|evPos),
data = t2,
family = binomial(link="logit"),
method = "LRT", cl = cl,
expand_re = T,
control = lmerControl(optimizer = "bobyqa",
optCtrl = list(maxfun = 1e7)))
## Contrasts set to contr.sum for the following variables: Cont, Sch, exp, SN, Im_comb
## Fitting 8 (g)lmer() models.
# nested model을 비교하는 method (Singmann, & Kellen, 2017)
# 1) Kenward-Roger approximation : method ="KR"
# 2) Satterthwaite approximation : method = "S"
# 3) Likelihood Ratio Test : method = "LRT"
# 4) Parametric bootstrapping : method = "PB"
stopCluster(cl)
summary(t2.acc.glmixed)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: Corr ~ Cont * Sch * exp + (1 | SN) + (1 | Im_comb) + (1 | evPos)
## Data: data
## Control: lmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 10000000))
##
## AIC BIC logLik deviance df.resid
## 11676.0 11756.9 -5827.0 11654.0 11509
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -5.8455 0.1729 0.4069 0.5962 1.4712
##
## Random effects:
## Groups Name Variance Std.Dev.
## SN (Intercept) 0.44953 0.6705
## Im_comb (Intercept) 0.06135 0.2477
## evPos (Intercept) 0.02680 0.1637
## Number of obs: 11520, groups: SN, 48; Im_comb, 24; evPos, 3
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.340472 0.146712 9.137 < 2e-16 ***
## Cont1 0.078806 0.023494 3.354 0.000796 ***
## Sch1 0.279148 0.055848 4.998 0.000000578 ***
## exp1 -0.322640 0.100038 -3.225 0.001259 **
## Cont1:Sch1 -0.057362 0.023492 -2.442 0.014617 *
## Cont1:exp1 -0.011660 0.023493 -0.496 0.619660
## Sch1:exp1 0.001834 0.023531 0.078 0.937873
## Cont1:Sch1:exp1 0.006665 0.023491 0.284 0.776613
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Cont1 Sch1 exp1 Cn1:S1 Cnt1:1 Sch1:1
## Cont1 0.006
## Sch1 0.010 -0.006
## exp1 -0.011 -0.004 -0.005
## Cont1:Sch1 -0.004 0.124 0.013 0.003
## Cont1:exp1 -0.003 -0.160 0.003 0.009 -0.036
## Sch1:exp1 -0.007 0.007 -0.069 0.033 -0.014 -0.015
## Cnt1:Sch1:1 0.002 -0.036 -0.006 -0.005 -0.160 0.124 0.029
anova(t2.acc.glmixed)
## Mixed Model Anova Table (Type 3 tests, LRT-method)
##
## Model: Corr ~ Cont * Sch * exp + (1 | SN) + (1 | Im_comb) + (1 | evPos)
## Data: t2
## Df full model: 11
## Df Chisq Chi Df Pr(>Chisq)
## Cont 10 11.2006 1 0.0008177 ***
## Sch 10 16.4896 1 0.00004892 ***
## exp 10 9.4708 1 0.0020877 **
## Cont:Sch 10 5.9306 1 0.0148803 *
## Cont:exp 10 0.2450 1 0.6205974
## Sch:exp 10 0.0060 1 0.9380801
## Cont:Sch:exp 10 0.0801 1 0.7772001
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
### GLMM - post-hoc
t2.acc.m1 <- emmeans(t2.acc.glmixed, pairwise ~ Sch | Cont + exp, type = "response") # adjust="bon" , "tukey"
summary(t2.acc.m1$contrasts) %>% kable(digits=2)| contrast | Cont | exp | odds.ratio | SE | df | null | z.ratio | p.value |
|---|---|---|---|---|---|---|---|---|
| within / across | paired | imm | 1.58 | 0.21 | Inf | 1 | 3.45 | 0 |
| within / across | unpaired | imm | 1.94 | 0.26 | Inf | 1 | 5.01 | 0 |
| within / across | paired | cons | 1.53 | 0.22 | Inf | 1 | 2.95 | 0 |
| within / across | unpaired | cons | 1.98 | 0.28 | Inf | 1 | 4.81 | 0 |
t2.acc.m2 <- emmeans(t2.acc.glmixed, pairwise ~ Cont | Sch + exp, type = "response") # adjust="bon" , "tukey"
summary(t2.acc.m2$contrasts) %>% kable(digits=2)| contrast | Sch | exp | odds.ratio | SE | df | null | z.ratio | p.value |
|---|---|---|---|---|---|---|---|---|
| paired / unpaired | within | imm | 1.03 | 0.09 | Inf | 1 | 0.36 | 0.72 |
| paired / unpaired | across | imm | 1.27 | 0.10 | Inf | 1 | 2.89 | 0.00 |
| paired / unpaired | within | cons | 1.05 | 0.11 | Inf | 1 | 0.49 | 0.62 |
| paired / unpaired | across | cons | 1.36 | 0.13 | Inf | 1 | 3.29 | 0.00 |
t2.acc.m3 <- emmeans(t2.acc.glmixed, pairwise ~ exp | Sch + Cont, type = "response") # adjust="bon" , "tukey"
summary(t2.acc.m3$contrasts) %>% kable(digits=2)| contrast | Sch | Cont | odds.ratio | SE | df | null | z.ratio | p.value |
|---|---|---|---|---|---|---|---|---|
| imm / cons | within | paired | 0.52 | 0.11 | Inf | 1 | -2.98 | 0 |
| imm / cons | across | paired | 0.50 | 0.11 | Inf | 1 | -3.20 | 0 |
| imm / cons | within | unpaired | 0.53 | 0.12 | Inf | 1 | -2.89 | 0 |
| imm / cons | across | unpaired | 0.54 | 0.12 | Inf | 1 | -2.89 | 0 |
Within과 Across 간의 차이를 통해 Event Integration 지표를 구성하였다. 이 값이 높을 수록 사전 예측과의 일치 여부에 따라 Event Memory 가 통합되었다는 것으로 해석될 수 있다.
## evIdx- Integration Score
t2accL.sch <- t2 %>% filter(Sch=='across') %>% group_by(SN, exp, Cont) %>%
dplyr::summarise(acc.sch = mean(Corr)*100) %>%
ungroup()
## `summarise()` has grouped output by 'SN', 'exp'. You can override using the `.groups` argument.
t2accL.nsch <- t2 %>% filter(Sch=='within') %>% group_by(SN, exp, Cont) %>%
dplyr::summarise(acc.nsch = mean(Corr)*100) %>%
ungroup()
## `summarise()` has grouped output by 'SN', 'exp'. You can override using the `.groups` argument.
# subject-level, long format
t2accL.is <- merge(t2accL.sch, t2accL.nsch, key=c(SN,exp, Cont))
t2accL.is <- t2accL.is %>% group_by(SN, exp, Cont) %>%
dplyr::summarise(IS = (acc.nsch - acc.sch)) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'exp'. You can override using the `.groups` argument.
# dplyr::summarise(IS = abs(acc.nsch - acc.sch)) %>% ungroup()
# t2accL.is %>% kable(digits=2)
# subject-level, wide format (SN/Btw/Block)
t2accW.is <- t2accL.is %>% spread(key=Cont, value = IS)
# t2accW.is %>% kable(digits=2)
# summary table: grand mean (eyerep/locrep)
t2accG.is <- t2accL.is %>% group_by(exp, Cont) %>%
summarise(IS.m = mean(IS), IS.sd = sd(IS)) %>%
ungroup()
## `summarise()` has grouped output by 'exp'. You can override using the `.groups` argument.
t2accG.is$IS.se <- Rmisc::summarySEwithin(data = t2accL.is, measurevar = "IS",
idvar = "SN", betweenvars = "exp",withinvars = c("Cont"))$se
t2accG.is$IS.ci <- Rmisc::summarySEwithin(data = t2accL.is, measurevar = "IS",
idvar = "SN", betweenvars = "exp",withinvars = c("Cont"))$ci
t2accG.is <- t2accG.is %>%
mutate(lower.ci = IS.m-IS.ci,
upper.ci = IS.m+IS.ci,
lower.se = IS.m-IS.se,
upper.se = IS.m+IS.se)
# for between-subject design. check help(summarySE)
t2accG.is %>% dplyr::select(exp, Cont, IS.m) %>%
spread(key=Cont, value=IS.m) %>% kable(digits=2)| exp | paired | unpaired |
|---|---|---|
| imm | 8.54 | 12.92 |
| cons | 5.63 | 9.86 |
t2.plot4 <- ggplot(data=t2accL.is, aes(x=Cont, y=IS, fill=Cont)) +
stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = 0.9,
width = 0.8, show.legend = FALSE, color = "black", size = 0.2) +
geom_hline(yintercept=0, linetype='solid', color='black', size=0.5) +
geom_segment(data=filter(t2accW.is), inherit.aes = FALSE,
aes(x=1, y=filter(t2accW.is)$paired,
xend=2, yend=filter(t2accW.is)$unpaired),
color="gray80", alpha =.9) +
geom_point(data=t2accL.is, position=position_dodge(0.80), color="gray80", alpha =.9,
size=2, show.legend = FALSE) +
geom_errorbar(data=t2accG.is, aes(y=IS.m, ymin = IS.m-IS.ci, ymax = IS.m+IS.ci), width=.2,
position=position_dodge(.8), color = "black") +
facet_grid(.~exp, scales="free_x", space = "free",
labeller = labeller(exp = c("imm" = "Immediate","cons" = "Consolidated"))) +
scale_x_discrete(labels=c("Paired", "Non-paired")) +
scale_fill_manual(values = c("#D2E6BD", "#4AA7B4")) + # , "#235796"
coord_cartesian(ylim = c(-20, 50), clip = "on") +
scale_y_continuous(breaks = c(-20, -10, 0, 10,20,30,40,50)) +
labs(x = "", y = "Segementation Index\n(Within - Across)") +
# ggtitle("Association Memory Accuracy") +
theme_bw(base_size = 15) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# aspect.ratio = 0.2,
plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
# plot.title = element_text(hjust = 0.5),
legend.position=c(0.8, 0.85))
t2.plot4t2.plot5<- ggplot(data=t2accL.is, aes(x=exp, y=IS, fill=exp)) +
geom_violin(data= t2accL.is, aes(x=exp, y=IS, fill=exp), width = 0.7, trim=TRUE,
position = position_dodge(0.80), alpha = 0.15, show.legend = F) +
# stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = 0.9,
# width = 0.8, show.legend = FALSE, color = "black", size = 0.2) +
geom_hline(yintercept=0, linetype='solid', color='black', size=0.5) +
geom_dotplot(data=t2accL.is, aes(x=exp, y=IS, fill=exp),
binaxis = "y", stackdir = "center", stackratio = 1.2,
color = "black", alpha = 0.5, #position = "nudge",
position=position_dodge(0.8),
inherit.aes = TRUE, binwidth = 1.2, show.legend = FALSE) +
geom_point(data=t2accG.is, aes(y = IS.m, x = exp, color=exp),
position=position_dodge(.8),
size = 4, show.legend = F) +
geom_errorbar(data=t2accG.is, aes(y=IS.m, ymin = IS.m-IS.ci, ymax = IS.m+IS.ci), width=.2,
position=position_dodge(.8), color = "black") +
facet_grid(.~Cont, scales="free_x", space = "free") +
scale_x_discrete(labels=c("Immediate", "Consolidated")) +
scale_fill_manual(values = c("#2C57AA","#F17402")) +
scale_color_manual(values = c("#2C57AA","#F17402")) +
coord_cartesian(ylim = c(-20, 50), clip = "on") +
scale_y_continuous(breaks = c(-20, -10, 0, 10,20,30,40,50)) +
labs(x = "", y = "Segementation Index\n(Within - Across)") +
# ggtitle("Association Memory Accuracy") +
theme_bw(base_size = 15) +
theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
axis.line=element_line(),
strip.text.x = element_text(face = "plain", size = 15, color = "black"),
strip.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.spacing=unit(1, "lines"),
# aspect.ratio = 0.2,
plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
# plot.title = element_text(hjust = 0.5),
legend.position=c(0.8, 0.85))
t2.plot5공고화 여부 x 일치 여부에 따른 Factorial ANOVA 및 Post-hoc 수행하였다.
t2.acc.aov2 <- aov_ez(id="SN", dv = "IS", data = t2accL.is, between = "exp",within = c("Cont"))
## Contrasts set to contr.sum for the following variables: exp
# test_sphericity(t2.acc.aov1)
nice(t2.acc.aov2, es="pes")
## Anova Table (Type 3 tests)
##
## Response: IS
## Effect df MSE F pes p.value
## 1 exp 1, 46 97.87 2.19 .045 .146
## 2 Cont 1, 46 36.70 12.12 ** .209 .001
## 3 exp:Cont 1, 46 36.70 0.00 <.001 .955
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
p_h1 <- t2accL.is %>%
group_by(exp) %>%
rstatix::pairwise_t_test(IS ~ Cont,
p.adjust.method="bonferroni",
paired=T, detailed=T) %>%
dplyr::select(exp, group1, group2, estimate, conf.low, conf.high, df, statistic, p.adj, p.adj.signif)
p_h2 <- t2accL.is %>%
group_by(exp) %>%
rstatix::cohens_d(IS ~ Cont, paired=T, ci = F) %>%
dplyr::select(exp, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("exp", "group1", "group2")) %>% kable(digits=3)| exp | group1 | group2 | estimate | conf.low | conf.high | df | statistic | p.adj | p.adj.signif | effsize | magnitude |
|---|---|---|---|---|---|---|---|---|---|---|---|
| cons | paired | unpaired | -4.236 | -8.068 | -0.404 | 23 | -2.287 | 0.032 | * | -0.467 | small |
| imm | paired | unpaired | -4.375 | -7.765 | -0.985 | 23 | -2.670 | 0.014 | * | -0.545 | moderate |
p_h1 <- t2accL.is %>%
group_by(Cont) %>%
rstatix::t_test(IS ~ exp,
paired=F, detailed=T, var.equal = T) %>%
dplyr::select(Cont, group1, group2, estimate, conf.low, conf.high, df, statistic, p)
p_h2 <- t2accL.is %>%
group_by(Cont) %>%
rstatix::cohens_d(IS ~ exp, paired=F, ci = F) %>%
dplyr::select(Cont, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("Cont", "group1", "group2")) %>% kable(digits=3)| Cont | group1 | group2 | estimate | conf.low | conf.high | df | statistic | p | effsize | magnitude |
|---|---|---|---|---|---|---|---|---|---|---|
| paired | imm | cons | 2.917 | -1.737 | 7.571 | 46 | 1.262 | 0.213 | 0.364 | small |
| unpaired | imm | cons | 3.056 | -1.821 | 7.932 | 46 | 1.261 | 0.214 | 0.364 | small |
t2accL.sch <- t2 %>% filter(Sch=='across') %>% group_by(SN, exp, Cont, evPos) %>%
dplyr::summarise(acc.sch = mean(Corr)*100) %>%
ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Cont'. You can override using the `.groups` argument.
t2accL.nsch <- t2 %>% filter(Sch=='within') %>% group_by(SN, exp, Cont, evPos) %>%
dplyr::summarise(acc.nsch = mean(Corr)*100) %>%
ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Cont'. You can override using the `.groups` argument.
# subject-level, long format
t2accL.is <- merge(t2accL.sch, t2accL.nsch, key=c(SN, exp, Cont, evPos))
t2accL.is <- t2accL.is %>% group_by(SN, exp, Cont, evPos) %>%
dplyr::summarise(IS = (acc.nsch - acc.sch)) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Cont'. You can override using the `.groups` argument.
# dplyr::summarise(IS = abs(acc.nsch - acc.sch)) %>% ungroup()
# t2accL.is %>% kable(digits=2)### GLMM - afex
(nc <- detectCores())
## [1] 8
cl <- makeCluster(rep("localhost", nc))
# t2.acc.glmixed <- afex::mixed(Corr ~ Cont*Sch*exp + (Cont*Sch|SN) + (Cont*Sch|Im_comb),
t2.acc.lmixed <- afex::mixed(IS ~ Cont*exp + (1|SN) + (1|evPos),
data = t2accL.is,
method = "LRT", cl = cl,
expand_re = T,
control = lmerControl(optimizer = "bobyqa",
optCtrl = list(maxfun = 1e7)))
## Contrasts set to contr.sum for the following variables: Cont, exp, SN
## REML argument to lmer() set to FALSE for method = 'PB' or 'LRT'
## Fitting 4 (g)lmer() models.
# nested model을 비교하는 method (Singmann, & Kellen, 2017)
# 1) Kenward-Roger approximation : method ="KR"
# 2) Satterthwaite approximation : method = "S"
# 3) Likelihood Ratio Test : method = "LRT"
# 4) Parametric bootstrapping : method = "PB"
stopCluster(cl)
summary(t2.acc.lmixed)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: IS ~ Cont * exp + (1 | SN) + (1 | evPos)
## Data: data
## Control: lmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 10000000))
##
## AIC BIC logLik deviance df.resid
## 2334.1 2359.8 -1160.1 2320.1 281
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.6477 -0.5965 -0.0305 0.6413 3.2563
##
## Random effects:
## Groups Name Variance Std.Dev.
## SN (Intercept) 20.26 4.501
## evPos (Intercept) 14.14 3.760
## Residual 164.76 12.836
## Number of obs: 288, groups: SN, 48; evPos, 3
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 9.23611 2.38873 3.47828 3.867 0.02340 *
## Cont1 -2.15278 0.75635 237.78655 -2.846 0.00481 **
## exp1 1.49306 0.99707 47.30940 1.497 0.14092
## Cont1:exp1 -0.03472 0.75635 237.78655 -0.046 0.96342
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Cont1 exp1
## Cont1 0.000
## exp1 0.000 0.000
## Cont1:exp1 0.000 0.000 0.000
anova(t2.acc.lmixed)
## Mixed Model Anova Table (Type 3 tests, LRT-method)
##
## Model: IS ~ Cont * exp + (1 | SN) + (1 | evPos)
## Data: t2accL.is
## Df full model: 7
## Df Chisq Chi Df Pr(>Chisq)
## Cont 6 7.9662 1 0.004766 **
## exp 6 2.1908 1 0.138834
## Cont:exp 6 0.0021 1 0.963384
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
### GLMM - post-hoc
t2.acc.m1 <- emmeans(t2.acc.lmixed, pairwise ~ Cont | exp, type = "response") # adjust="bon" , "tukey"
summary(t2.acc.m1$contrasts) %>% kable(digits=2)| contrast | exp | estimate | SE | df | t.ratio | p.value |
|---|---|---|---|---|---|---|
| paired - unpaired | imm | -4.38 | 2.15 | 239.81 | -2.04 | 0.04 |
| paired - unpaired | cons | -4.24 | 2.15 | 239.81 | -1.97 | 0.05 |
t2.acc.m1 <- emmeans(t2.acc.lmixed, pairwise ~ exp | Cont, type = "response") # adjust="bon" , "tukey"
summary(t2.acc.m1$contrasts) %>% kable(digits=2)| contrast | Cont | estimate | SE | df | t.ratio | p.value |
|---|---|---|---|---|---|---|
| imm - cons | paired | 2.92 | 2.53 | 112.56 | 1.15 | 0.25 |
| imm - cons | unpaired | 3.06 | 2.53 | 112.56 | 1.21 | 0.23 |
sessionInfo()
## R version 4.1.1 (2021-08-10)
## Platform: aarch64-apple-darwin20 (64-bit)
## Running under: macOS Monterey 12.1
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] parallel stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] rstatix_0.7.0 effectsize_0.4.5 caret_6.0-88
## [4] psycho_0.6.1 effects_4.2-0 latticeExtra_0.6-29
## [7] ggpubr_0.4.0 emmeans_1.6.3 lmerTest_3.1-3
## [10] afex_1.0-1 lme4_1.1-27.1 Matrix_1.3-4
## [13] psych_2.1.9 car_3.0-11 carData_3.0-4
## [16] knitr_1.37 forcats_0.5.1 stringr_1.4.0
## [19] dplyr_1.0.7 purrr_0.3.4 readr_2.0.1
## [22] tidyr_1.1.3 tibble_3.1.4 tidyverse_1.3.1
## [25] ggbeeswarm_0.6.0 ggplot2_3.3.5 Rmisc_1.5
## [28] plyr_1.8.6 lattice_0.20-44 pacman_0.5.1
## [31] klippy_0.0.0.9500 patchwork_1.1.0.9000 papaja_0.1.0.9997
## [34] devtools_2.4.2 usethis_2.0.1 distill_1.2
##
## loaded via a namespace (and not attached):
## [1] utf8_1.2.2 tidyselect_1.1.1 grid_4.1.1
## [4] pROC_1.18.0 munsell_0.5.0 codetools_0.2-18
## [7] future_1.22.1 withr_2.4.3 colorspace_2.0-2
## [10] highr_0.9 rstudioapi_0.13 stats4_4.1.1
## [13] ggsignif_0.6.3 listenv_0.8.0 labeling_0.4.2
## [16] mnormt_2.0.2 farver_2.1.0 datawizard_0.2.0.1
## [19] rprojroot_2.0.2 coda_0.19-4 parallelly_1.28.1
## [22] vctrs_0.3.8 generics_0.1.0 TH.data_1.1-0
## [25] ipred_0.9-12 xfun_0.29 R6_2.5.1
## [28] cachem_1.0.6 assertthat_0.2.1 scales_1.1.1
## [31] multcomp_1.4-18 nnet_7.3-16 beeswarm_0.4.0
## [34] gtable_0.3.0 downlit_0.2.1 globals_0.14.0
## [37] processx_3.5.2 sandwich_3.0-1 timeDate_3043.102
## [40] rlang_0.4.12 splines_4.1.1 ModelMetrics_1.2.2.2
## [43] broom_0.7.9.9000 yaml_2.2.1 reshape2_1.4.4
## [46] abind_1.4-5 modelr_0.1.8 backports_1.2.1
## [49] tools_4.1.1 lava_1.6.10 ellipsis_0.3.2
## [52] jquerylib_0.1.4 RColorBrewer_1.1-2 sessioninfo_1.1.1
## [55] Rcpp_1.0.7 ps_1.6.0 prettyunits_1.1.1
## [58] rpart_4.1-15 zoo_1.8-9 haven_2.4.3
## [61] fs_1.5.0 survey_4.1-1 magrittr_2.0.1
## [64] data.table_1.14.0 openxlsx_4.2.4 reprex_2.0.1
## [67] tmvnsim_1.0-2 mvtnorm_1.1-2 pkgload_1.2.2
## [70] hms_1.1.0 evaluate_0.14 xtable_1.8-4
## [73] pbkrtest_0.5.1 rio_0.5.27 jpeg_0.1-9
## [76] readxl_1.3.1 testthat_3.0.4 compiler_4.1.1
## [79] crayon_1.4.2 minqa_1.2.4 htmltools_0.5.2
## [82] tzdb_0.1.2 lubridate_1.7.10 DBI_1.1.1
## [85] dbplyr_2.1.1 MASS_7.3-54 boot_1.3-28
## [88] cli_3.1.0 mitools_2.4 insight_0.14.4
## [91] gower_0.2.2 pkgconfig_2.0.3 numDeriv_2016.8-1.1
## [94] foreign_0.8-81 recipes_0.1.16 xml2_1.3.3
## [97] foreach_1.5.1 vipor_0.4.5 estimability_1.3
## [100] prodlim_2019.11.13 rvest_1.0.1 callr_3.7.0
## [103] digest_0.6.29 parameters_0.14.0 rmarkdown_2.11
## [106] cellranger_1.1.0 curl_4.3.2 nloptr_1.2.2.2
## [109] lifecycle_1.0.0 nlme_3.1-152 jsonlite_1.7.2
## [112] desc_1.3.0 fansi_0.5.0 pillar_1.6.2
## [115] fastmap_1.1.0 httr_1.4.2 pkgbuild_1.2.0
## [118] survival_3.2-11 glue_1.6.0 remotes_2.4.0
## [121] bayestestR_0.11.0 zip_2.2.0 png_0.1-7
## [124] iterators_1.0.13 class_7.3-19 stringi_1.7.6
## [127] memoise_2.0.0 future.apply_1.8.1